/// 旋转动画
/// 使用RotationTransition
/// 默认就是转一圈,我们可以创建Animation控制动画过程
/// 参考41_animation
/// 类似的还有其他XxxTransition

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with TickerProviderStateMixin {
  late AnimationController _controller;
  bool _loading = false;

  @override
  void initState() {
    _controller = AnimationController(
      // lowerBound: 1.5, // 初始值
      // upperBound: 3.5, // 结束值
      vsync: this,
      duration: Duration(seconds: 1),
    );
    super.initState();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Material App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Material App Bar'),
        ),
        body: Center(
          // 还可以有其他 Transition
          child: RotationTransition(
            // turns: _controller,
            // 也可以通过drive函数控制初始值和结束值
            // chain 表示连接多个内容,这样我们可以控制几个动画分别在不同的时间段内执行
            // Interval 表示运行的时间段,0-1之间,0-0.5表示前一半时间运行
            // 以上称之为交错动画,大口大口,看看,.,.宽大空间';
            turns: _controller.drive(Tween(begin: 1.0, end: 2.0)
                .chain(CurveTween(curve: Interval(0, 0.5)))),
            child: Icon(Icons.refresh),
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            if (_loading) {
              _controller.stop();
            } else {
              _controller.repeat();
            }
            _loading = !_loading;
          },
          child: Icon(Icons.access_time),
        ),
      ),
    );
  }
}
